﻿Imports Testeitor.DAL
Imports System.Data.SqlClient
Imports Testeitor.Entidades

Public Class UsuarioDAO
    Inherits DAOBase

    Public Overrides Function commandActualizar(ByRef usuario As EntityBase) As SqlCommand
        Dim cmd As New SqlCommand("UPDATE Usuario SET nombre = @nombre, apellido = @apellido, fechaAlta = @fechaAlta, rol_id = @rol_id, login = @login, password = @password, email = @email WHERE id = @id")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@nombre", DirectCast(usuario, UsuarioEntity).Nombre))
        cmd.Parameters.Add(New SqlParameter("@apellido", DirectCast(usuario, UsuarioEntity).Apellido))
        cmd.Parameters.Add(New SqlParameter("@fechaAlta", DirectCast(usuario, UsuarioEntity).FechaAlta))
        cmd.Parameters.Add(New SqlParameter("@rol_id", DirectCast(usuario, UsuarioEntity).RolID))
        cmd.Parameters.Add(New SqlParameter("@login", DirectCast(usuario, UsuarioEntity).Login))
        cmd.Parameters.Add(New SqlParameter("@password", DirectCast(usuario, UsuarioEntity).Password))
        cmd.Parameters.Add(New SqlParameter("@email", DirectCast(usuario, UsuarioEntity).Email))
        cmd.Parameters.Add(New SqlParameter("@id", usuario.Id))
        commandActualizar = cmd
    End Function

    Public Overrides Function commandEliminar(ByVal id As Integer) As SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("DELETE FROM Usuario WHERE id = @id")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@id", id))
        commandEliminar = cmd
    End Function

    Public Overrides Function commandInsertar(ByRef usuario As EntityBase) As SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("INSERT INTO Usuario VALUES(@nombre, @apellido, @fechaAlta, @rol_id, @login, @password, @email)")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@nombre", DirectCast(usuario, UsuarioEntity).Nombre))
        cmd.Parameters.Add(New SqlParameter("@apellido", DirectCast(usuario, UsuarioEntity).Apellido))
        cmd.Parameters.Add(New SqlParameter("@fechaAlta", DirectCast(usuario, UsuarioEntity).FechaAlta))
        cmd.Parameters.Add(New SqlParameter("@rol_id", DirectCast(usuario, UsuarioEntity).RolID))
        cmd.Parameters.Add(New SqlParameter("@login", DirectCast(usuario, UsuarioEntity).Login))
        cmd.Parameters.Add(New SqlParameter("@password", DirectCast(usuario, UsuarioEntity).Password))
        cmd.Parameters.Add(New SqlParameter("@email", DirectCast(usuario, UsuarioEntity).Email))
        commandInsertar = cmd
    End Function

    Public Overrides Function commandSeleccionar(ByVal id As Integer) As SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("SELECT * FROM Usuario WHERE id = @id")
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@id", id))
        commandSeleccionar = cmd
    End Function

    Public Overrides Function commandSeleccionarWhere(ByVal where As String) As SqlCommand
        'Creo el Command con la consulta
        Dim cmd As New SqlCommand("SELECT * FROM Usuario WHERE " + where)
        'Creo los parametros para la consulta
        cmd.Parameters.Add(New SqlParameter("@where", where))
        commandSeleccionarWhere = cmd
    End Function

    Public Overrides Function commandSeleccionarTodas() As SqlCommand
        Dim cmd As New SqlCommand("SELECT * FROM Usuario")
        commandSeleccionarTodas = cmd
    End Function

    Public Overrides Function CargarEntidad(ByVal reader As IDataReader, ByRef stack As Stack(Of Integer)) As EntityBase
        Dim usuario As New UsuarioEntity()

        Dim temp As Object
        'Campo Id
        usuario.Id = Convert.ToInt32(reader("id"))
        'Resto de campos
        temp = reader("nombre")
        If temp.Equals(DBNull.Value) Then
            usuario.Nombre = String.Empty
        Else
            usuario.Nombre = Convert.ToString(reader("nombre"))
        End If

        temp = reader("apellido")
        If temp.Equals(DBNull.Value) Then
            usuario.Apellido = String.Empty
        Else
            usuario.Apellido = Convert.ToString(reader("apellido"))
        End If

        temp = reader("fechaAlta")
        If temp.Equals(DBNull.Value) Then
            usuario.FechaAlta = Date.Today
        Else
            usuario.FechaAlta = Convert.ToDateTime(reader("fechaAlta"))
        End If

        temp = reader("rol_id")
        If temp.Equals(DBNull.Value) Then
            usuario.RolID = New RolEntity
        Else
            Dim index As Integer
            index = Convert.ToInt32(reader("rol_id"))
            stack.Push(index)
        End If

        temp = reader("login")
        If temp.Equals(DBNull.Value) Then
            usuario.Login = String.Empty
        Else
            usuario.Login = Convert.ToString(reader("login"))
        End If

        temp = reader("password")
        If temp.Equals(DBNull.Value) Then
            usuario.Password = String.Empty
        Else
            usuario.Password = Convert.ToString(reader("password"))
        End If

        temp = reader("email")
        If temp.Equals(DBNull.Value) Then
            usuario.Email = String.Empty
        Else
            usuario.Email = Convert.ToString(reader("email"))
        End If

        CargarEntidad = usuario
    End Function

    Public Overrides Sub CargarRelacion(ByRef entidad As Entidades.EntityBase, ByRef stack As Stack(Of Integer))
        Dim rolDao As New RolDAO()
        Dim rol As New RolEntity()
        rol = rolDao.Seleccionar(stack.Pop)
        DirectCast(entidad, UsuarioEntity).RolID = rol
    End Sub
End Class
